/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import clases.Caja;
import clases.MovimientoCaja;
import clases.TipoMovimientoCaja;
import clases.Usuario;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList;

/**
 *
 * @author Edder
 */
public class MdlMovimientoCaja implements Modelo<MovimientoCaja>{

    /**
     * 
     * @param movimientoCaja
     * @param cnx
     * @throws SQLException 
     */
    @Override
    public void insert(MovimientoCaja movimientoCaja, Conexion cnx) throws SQLException {
        String sql = "INSERT INTO movimientocaja (tipoMovimientoCaja, idReferencia, fecha, monto, usuario, estado, caja) "
                + "VALUES (" + movimientoCaja.getTipoMovimientoCaja().getIdTipoMovimientoCaja()+", "
                + movimientoCaja.getIdReferencia() + ", "
                + "'" + movimientoCaja.getFecha().toString() + "', "
                + movimientoCaja.getMonto() + ", "
                + movimientoCaja.getUsuario().getIdUsuario() + ", "
                + "'" + movimientoCaja.getEstado() + "', "
                + movimientoCaja.getCaja().getIdCaja() + ");";
        cnx.ejecutar(sql);
    }

    /**
     * 
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public int getLastId(Conexion cnx) throws SQLException {
        String sql = "SELECT MAX(idMovimientoCaja) FROM movimientocaja";
        ResultSet rs = cnx.consultar(sql);
        if (rs.next()) {
            return rs.getInt(1);
        }
        return -1;
    }

    /**
     * 
     * @param movimientoCaja
     * @param cnx
     * @throws SQLException 
     */
    @Override
    public void update(MovimientoCaja movimientoCaja, Conexion cnx) throws SQLException {
        String sql = "UPDATE movimientocaja SET "
                + "idTipoMovimientoCaja = " + movimientoCaja.getTipoMovimientoCaja().getIdTipoMovimientoCaja()+ ", "
                + "idReferencia = " + movimientoCaja.getIdReferencia() + ", "
                + "fecha = '" + movimientoCaja.getFecha().toString() + "', "
                + "monto = " + movimientoCaja.getMonto() + ", "
                + "idUsuario = " + movimientoCaja.getUsuario().getIdUsuario() + ", "
                + "estado = '" + movimientoCaja.getEstado() + "', "
                + "caja = " + movimientoCaja.getCaja().getIdCaja() + " "
                + "WHERE idMovimientoCaja = " + movimientoCaja.getIdMovimientoCaja() + ";";
        cnx.ejecutar(sql);
    }

    /**
     * 
     * @param query
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public ArrayList<MovimientoCaja> get(String query, Conexion cnx) throws SQLException {
        ResultSet rs = cnx.consultar(query);
        ArrayList<MovimientoCaja> movimientos;
        movimientos = new ArrayList<>();
        while(rs.next()){
            movimientos.add(
                    new MovimientoCaja(
                            rs.getInt(1), 
                            new TipoMovimientoCaja(){
                                {
                                    this.setIdTipoMovimientoCaja(rs.getInt(2));
                                }
                            }, 
                            rs.getInt(3), 
                            LocalDate.parse(rs.getString(4)), 
                            rs.getFloat(5), 
                            new Usuario(){
                                {
                                    this.setIdUsuario(rs.getInt(6));
                                }
                            }, 
                            rs.getString(7).charAt(0), 
                            new Caja(){
                                {
                                    this.setIdCaja(rs.getInt(8));
                                }
                            }));
        }
        return movimientos;
    }

    /**
     * 
     * @param idMovimientoCaja
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public MovimientoCaja get(int idMovimientoCaja, Conexion cnx) throws SQLException {
        String sql = "SELECT * FROM movimientocaja WHERE idMovimientoCaja LIKE " + idMovimientoCaja;
        ResultSet rs = cnx.consultar(sql);
        MovimientoCaja movimientocaja = null;
        if (rs.next()) {
            movimientocaja = new MovimientoCaja(
                    rs.getInt(1), 
                    new TipoMovimientoCaja(){
                        {
                            this.setIdTipoMovimientoCaja(rs.getInt(2));
                        }
                    }, 
                    rs.getInt(3), 
                    LocalDate.parse(rs.getString(4)), 
                    rs.getFloat(5), 
                    new Usuario(){
                        {
                            this.setIdUsuario(rs.getInt(6));
                        }
                    }, 
                    rs.getString(7).charAt(0), 
                    new Caja(){
                        {
                            this.setIdCaja(rs.getInt(8));
                        }
                    }
            );
        }
        return movimientocaja;
    }
    
}
